<?php

/**
 * reciveXml actions.
 *
 * @package    comande
 * @subpackage reciveXml
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class reciveXmlActions extends sfActions
{




  public function executePrintText(sfWebRequest $request)
  {


     $this->setLayout(false);
     $objBean = SessionStartTimePeer::retrieveByPK(1);
     /*--------------------request de prueba------------------------*/
     $xmlRequestTest =  SessionStartTimePeer::retrieveByPK(2);
     $newXmlElement = new SimpleXMLElement($xmlRequestTest->getHoraInicio());
     /*--------------------fin request de prueba--------------------*/


     if(is_object($objBean))
     {
          $xmlElement = new SimpleXMLElement($objBean->getHoraInicio());
          $xmlAplications = $newXmlElement->applications->application;
          foreach($xmlAplications as $application)
          {             
                  $serviceXml = new serviceXml();
                  $resptId = $serviceXml->buscarPorId($xmlElement,$application->id);
              
                  if($resptId['success'])
                  {
                     
                      $xmlNewVentanas =$application->windows->window;
                      foreach($xmlNewVentanas as $window)
                      {
                             /*tengo que comenzar a buscar si por el nombre de ventana*/
                             $resptVentana = $serviceXml->buscarPorVentana($resptId["objectXml"],strval($window->title));
                             $xmlHours = $window->hours->hour;
                             if($resptVentana['success'])
                             {
                                   
                                   foreach($xmlHours as $hour)
                                   {

                                         $newHoraInicio= date('Y-m-d H:i:s',strtotime(  strval($hour->start_time)  )  );
                                         $newHoraFin   = date('Y-m-d H:i:s',strtotime(  strval($hour->end_time  )  )  );

                                          /*procedo a buscar el intervalo de horas con la hora actual*/                                          
                                          $respHoras = $serviceXml->buscarPorHora($resptVentana["objectXml"], $newHoraInicio);

                                          if($respHoras['code']=="hour")
                                          {  /*si el intervalo es correcto tengo que actualizar solo la hora de fin del programa*/
                                              $respHoras['objectXml']->end_time=$newHoraFin;
                                              $xmlElement->asXML();                                              
                                          }
                                          else
                                          {   /*si es un nuevo intervalo tengo que agregar ese intervalo de tiempo al xml*/
                                              $serviceXml->agregarHourXml($respHoras['objectXml'],$newHoraInicio,$newHoraFin);
                                              $xmlElement->asXML();
                                          }
                                   }
                             }
                             else
                             {   /*procedo a agregar una nueva ventana*/
                                 
                                 $serviceXml->agregarVentanaXml($resptVentana['objectXml'],$window);
                                 $xmlElement->asXML();
                             }
                      }
                  }
                  else
                  {/*agrego una nueva aplicacion al xml*/

                    $serviceXml->agregarAplicacion($resptId['objectXml'], $application);

                  }

          }
          $this->xml =$xmlElement->asXML();

     }
  }




  public function executeDemoXml(sfWebRequest $request)
  {

  $request->setRequestFormat('xml');

          if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
          {
              $postText = file_get_contents('php://input');

              $newXmlElement     =  new SimpleXMLElement($postText);
              $codigoCliente     =  $newXmlElement->client_code;
              $tokenCliente      =  $newXmlElement->client_token;
              $fechaEnvioCliente =   date('Y-m-d',strtotime( strval($newXmlElement->datetime_delivery)  )  );

              $criteria = new Criteria();
              $criteria->add(UsuarioPeer::ID, $codigoCliente);
              $criteria->add(UsuarioPeer::TOKEN, $tokenCliente);
              $usuarioBean = UsuarioPeer::doSelectOne($criteria);

              if(is_object($usuarioBean))
              {
                 $criteriaDetalle    = new criteria();
                 $criteriaDetalle->add(DetalleConsumoUsuarioPeer::FECHA,$fechaEnvioCliente);
                 $criteriaDetalle->add(DetalleConsumoUsuarioPeer::USUARIO_ID,$usuarioBean->getId());
                 $cantidadDetalle = DetalleConsumoUsuarioPeer::doCount($criteriaDetalle);
                 if($cantidadDetalle>0)
                 {
                      $serviceXml = new serviceXml();
                      $detalleBean = DetalleConsumoUsuarioPeer::doSelectOne($criteriaDetalle);
                      $xmlElement = new SimpleXMLElement($detalleBean->getArrayConsumo());
                      $xmlAplications = $newXmlElement->applications->application;
                      foreach($xmlAplications as $application)
                      {

                              $resptId = $serviceXml->buscarPorId($xmlElement,$application->id);

                              if($resptId['success'])
                              {

                                  $xmlNewVentanas =$application->windows->window;
                                  foreach($xmlNewVentanas as $window)
                                  {
                                         /*tengo que comenzar a buscar si por el nombre de ventana*/
                                         $resptVentana = $serviceXml->buscarPorVentana($resptId["objectXml"],strval($window->title));
                                         $xmlHours = $window->hours->hour;
                                         if($resptVentana['success'])
                                         {

                                               $startTimeWindow = date('Y-m-d H:i:s',strtotime( strval($window->start_time) ) );
                                               $endTimeWindow   = date('Y-m-d H:i:s',strtotime( strval($window->end_time  ) ) );
                                               $diferenciaSegundos = $serviceXml->diferenciaSegundos($startTimeWindow,$endTimeWindow);
                                               $end_timeAux = date('Y-m-d H:i:s',strtotime( '+'.$diferenciaSegundos.' second',strtotime($resptVentana["objectXml"]->end_time))  );
                                               $resptVentana["objectXml"]->end_time=$end_timeAux;
                                               $xmlElement->asXML();

                                               foreach($xmlHours as $hour)
                                               {

                                                     $newHoraInicio= date('Y-m-d H:i:s',strtotime(  strval($hour->start_time)  )  );
                                                     $newHoraFin   = date('Y-m-d H:i:s',strtotime(  strval($hour->end_time  )  )  );

                                                      /*procedo a buscar el intervalo de horas con la hora actual*/
                                                      $respHoras = $serviceXml->buscarPorHora($resptVentana["objectXml"], $newHoraInicio);

                                                      if($respHoras['code']=="hour")
                                                      {  /*si el intervalo es correcto tengo que actualizar solo la hora de fin del programa*/
                                                          $respHoras['objectXml']->end_time=$newHoraFin;
                                                          $xmlElement->asXML();
                                                      }
                                                      else
                                                      {   /*si es un nuevo intervalo tengo que agregar ese intervalo de tiempo al xml*/
                                                          $serviceXml->agregarHourXml($respHoras['objectXml'],$newHoraInicio,$newHoraFin);
                                                          $xmlElement->asXML();
                                                      }
                                               }
                                         }
                                         else
                                         {   /*procedo a agregar una nueva ventana*/

                                             $serviceXml->agregarVentanaXml($resptVentana['objectXml'],$window);
                                             $xmlElement->asXML();
                                         }
                                  }
                              }
                              else
                              {/*agrego una nueva aplicacion al xml*/

                                $serviceXml->agregarAplicacion($resptId['objectXml'], $application);

                              }

                      }

                      $detalleBean->setArrayConsumo($xmlElement->asXML());
                      $detalleBean->save();
                      $this->message = "UPDATE DETAIL";
                      $this->code    = "c-2002";
                      return sfView::SUCCESS;

                 }
                 else
                 {
                     $newDetalleBean = new DetalleConsumoUsuario();
                     $newDetalleBean->setUsuarioId($codigoCliente);
                     $newDetalleBean->setFecha($fechaEnvioCliente);
                     $newDetalleBean->setArrayConsumo($newXmlElement->asXML());
                     $newDetalleBean->save();
                     $this->message = "NEW DETAIL";
                     $this->code    = "c-2001";
                     return sfView::SUCCESS;
                 }

              }
              else
              {
                  $this->message = "TOKEN/USER INCORRECT";
                  $this->code    = "c-1002";
                  return sfView::ERROR;
              }
          }
          else
          {
             $this->message = "NOT POST REQUEST_METHOD";
             $this->code    = "c-1001";
             return sfView::ERROR;
          }
  }


 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {

     
      if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
      {
           $postText = file_get_contents('php://input');
      }
     
      $lib               = new myLib();
      $newXmlElement = new SimpleXMLElement($postText);

      $items             = $result->items->Detalle;
      $codigo_cliente    = $result->codigo_cliente;
      $token_client      = $result->token_cliente;
      $tiempoinactividad = $result->tiempo_actividad;

      $new_objeto        = new DetalleConsumoUsuario();
      $new_objeto->setUsuarioId(34);
      $new_objeto->setArrayConsumo("");
      $new_objeto->setMoreOptions("");
      $new_objeto->setFecha("");
      $new_objeto->save();

 }

 public function executeImage(sfWebRequest $request){

   /*   if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){
    $postText = file_get_contents('php://input');
}



$new_usuario = new Usuario();
$new_usuario ->setApellidos($postText);
$new_usuario->save();


*/

$server = new SoapServer(null, array('uri' => "urn://http:/www.wstutorial.com/"));
$server->addFunction("helloWorld");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $server->handle();
} else {
 echo "This SOAP Server Example can handle following functions:";

 $functions = $server->getFunctions();
 foreach($functions as $func) {
  echo "- ".$func . "";

 }
}

function helloWorld($buddy) {
   return "Welcome to the world, " . $buddy . "!";
}


 }
public function executePrueba(sfWebRequest $request){


}

public function executeDeserealizar(sfWebRequest $request){

    $id_usuario = $request->getParameter('id_usuario');
    $fecha = $request->getParameter('fecha');


$new_criteria = new Criteria();
$new_criteria->add(DetalleConsumoUsuarioPeer::FECHA, "%".$fecha."%",Criteria::LIKE );
$new_criteria->add(DetalleConsumoUsuarioPeer::USUARIO_ID,$id_usuario,Criteria::LIKE);
$objeto = DetalleConsumoUsuarioPeer::doSelectOne($new_criteria);

$this->objeto = $objeto;


}



}
